昨天我們透過註冊表註冊了一個物品殞鐵錠,今天我們要來註冊一個與殞鐵錠對應的殞鐵磚。
方塊與物品不同,物品只以掉落物以及物品欄型態出現,而方塊則可以構成Minecraft中的世界。方塊既可以以物品形式存在,也可以實體的方式存在,所以我們需要同時註冊Item註冊表與Block註冊表。
我們先建立一個block資料夾,在資料夾中建立一個ModBlocks class,這個class中我們需要兩個方法,一個用來註冊我們的磚的物品型態,另一個用來註冊方塊型態。
private static Item registerBlockItem(String name, Block block){
return Registry.register(Registries.ITEM, new Identifier(TheClassicofMountainsandOceans.MOD_ID, name)
, new BlockItem(block, new FabricItemSettings()));
}
這個方法跟昨天的註冊物品很像,但是有幾點不一樣,首先我們的第二個參數是Block類,而不是Item,同時在第四行這裡我們新建了一個BlockItem實例,代表傳入的方塊block。
private static Block registerBlock(String name,Block block){
registerBlockItem(name, block);
return Registry.register(Registries.BLOCK, new Identifier(TheClassicofMountainsandOceans.MOD_ID, name), block);
}
這個就是用來註冊方塊的方法了,可以看到輸入是name跟一個Block類,我們先使用剛剛寫好的registerBlockItem同步建立一個BlockItem,這個BlockItem也帶入我們的name跟block,後面我們使用Registry.register註冊一個BLOCK類,識別符一樣是帶入MOD_ID跟name,最後是方塊的屬性。
public static final Block SIDERITE_BLOCK = registerBlock("siderite_block",
new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK)));
接下來我們就可以呼叫剛剛寫好的方法了,我們先建立一個Block類的常量,同時是靜態且不可變的,我們的方塊名稱叫siderite_block,而我們的方塊屬性,因為要設定的內容比較多,例如方塊放置時的聲音、抗爆性等等屬性,所以我們可以直接使用FabricBlcokSettig.copyOf(Blocks.IRON_BLOCK),這樣我們方塊的屬性就會跟鐵磚一樣。
這是鐵磚的屬性
完成以上的程式,我們一樣需要JSON檔來規範幾件事情,首先我們需要在assets/[MODID]中建立一個新資料夾,叫做blockstates,並且在裡面建立一個JSON檔,名稱要跟你建立的Block的ID(小寫的那個)一樣,以我的為例,我的JSON檔叫siderite_block.json。
接著裡面這樣寫
{
"variants": {
"": {
"model": "como:block/siderite_block"
}
}
}
variants代表著Block中有許多不同狀態,每個狀態分別要用哪一個texture做外觀。
""代表這個方塊沒有狀態變化,也就是只有一個texture不會改變。
"model": "como:block/siderite_block" 定義了這個方塊的model文件放在哪裡,這代表我們需要在models中建立一個新資料夾叫做block,將我們的方塊model放在這裡,一樣我們取名siderite_block.json,裡面這樣寫
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "como:block/siderite_block"
}
}
"parent": "minecraft:block/cube_all"
parent代表我們使用了一個父模型,這個模型會決定怎麼渲染這個方塊,以及這個方塊的形狀,這裡我們使用cube_all代表這個方塊是六面都使用相同的紋理,像是泥土這類的方塊,而不是像樹木一樣有些面有不同。
"textures": { "all": "como:block/siderite_block" }
代表每一個面都使用相同的texture,而texture的存放位置在block/siderite_block中,所以現在我們可以把我們的紋理移到texture/block中,檔名要記得跟Block的ID一樣。
接下來記得要在en_us中加入這個方塊在遊戲中的翻譯
因為是方塊,所以前面記得改成block。
這樣萬事俱備,我們可以來看看成果了
可以看到我們的方塊以及方塊對應的物品都出現了,這樣就大功告成